package com.byf.cart.sync;

import com.alibaba.fastjson2.JSONObject;
import com.byf.cart.domain.CartItem;
import com.byf.cart.mapper.CartItemMapper;
import com.byf.cart.vo.CartItemVo;
import com.byf.common.redis.service.RedisService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.Map;

@Component
public class CartSync {
    @Autowired
    private RedisService redisService;

    @Autowired
    private CartItemMapper cartItemMapper;

    @Scheduled(cron = "0/10 * * * * *")
    public void synchronousCardItem(){
        //从redis中获取所有前缀为CART_MAP:的信息
        Collection<String> cartKeys = redisService.keys("CART:*");

        //清除购物车详情
        cartItemMapper.clearAll();

        for (String cartKey : cartKeys) {
            Map<String, Object> cacheMap = redisService.getCacheMap(cartKey);
            Collection<Object> values = cacheMap.values();
            for (Object value : values) {
                String cartItemVoJson = JSONObject.toJSONString(value);
                CartItemVo cartItemVo = JSONObject.parseObject(cartItemVoJson, CartItemVo.class);
                CartItem cartItem = new CartItem();
                BeanUtils.copyProperties(cartItemVo,cartItem);
                cartItemMapper.insertCartItem(cartItem);
            }
        }
    }

//    @Transactional
//    @Scheduled(cron = "0/10 * * * * *")
//    public void synchronousCard(){
//        //从redis中获取所有前缀为CART_MAP:的信息
//        Collection<String> keys = redisService.keys("CART_MAP:*");
//        //用来存储从redis中获取的CartVo模版集合
//        List<CartVo> cartVos = new ArrayList<>();
//        for (String key : keys) {
//            //循环跟购物车相关的key，根据key获取所有购物车信息
//            Map<String, Object> cacheMap = redisService.getCacheMap(key);
//            for (Object cartVoObj : cacheMap.values()) {
//                //将从redis中取出的购物车信息转成json字符串
//                String cartVoJson = JSONObject.toJSONString(cartVoObj);
//                //再转成CartVo模版对象
//                CartVo cartVo = JSONObject.parseObject(cartVoJson, CartVo.class);
//                cartVos.add(cartVo);
//            }
//        }
//        //清除购物车详情信息
//        cartItemMapper.delCartItemById();
//        //循环遍历购物车集合
//        for (CartVo cartVo : cartVos) {
//            HashMap<Long, CartItem> cartItemMap = cartVo.getCartItemMap();
//            Collection<CartItem> cartItems = cartItemMap.values();
//            for (CartItem cartItem : cartItems) {
//                CartItem addCartItem = new CartItem();
//                BeanUtils.copyProperties(cartItem,addCartItem);
//                addCartItem.setCartId(cartVo.getId());
//                cartItemMapper.insertCartItem(addCartItem);
//            }
////            //查看数据库中是否已有该用户的购物车信息
////            Cart cart = new Cart();
////            cart.setUserId(cartVo.getUserId());
////            List<Cart> carts = cartMapper.selectCartList(cart);
////            if (CollectionUtils.isEmpty(carts)){
////                //没有则新增一条购物车信息以及购物车详情信息
////                Cart addCart = new Cart();
////                BeanUtils.copyProperties(cartVo,addCart);
////                cartMapper.insertCart(addCart);
////                //获取购物车详情信息
////                HashMap<Long, CartItem> cartItemMap = cartVo.getCartItemMap();
////                Collection<CartItem> cartItems = cartItemMap.values();
////                CartItem addCartItem = new CartItem();
////                if (!CollectionUtils.isEmpty(cartItems)){
////                    //循环新增购物车详情信息
////                    for (CartItem cartItem : cartItems) {
////                        BeanUtils.copyProperties(cartItem,addCartItem);
////                        addCartItem.setCartId(addCart.getId());
////                        cartItemMapper.insertCartItem(addCartItem);
////                    }
////                }
////            }else {
//                //判断商品信息是否存在
////                HashMap<Long, CartItem> cartItemMap = cartVo.getCartItemMap();
////                Collection<CartItem> cartItems = cartItemMap.values();
////                for (CartItem cartItem : cartItems) {
////                    CartItem getCatItemReq = new CartItem();
////                    getCatItemReq.setSkuId(cartItem.getSkuId());
////                    getCatItemReq.setCartId(cartItem.getCartId());
////                    List<CartItem> cartItemsBySkuId = cartItemMapper.selectCartItemList(getCatItemReq);
////                    if (!CollectionUtils.isEmpty(cartItemsBySkuId)){
////                        //如果购物车详情都有则判断数量是否正确
////                        for (CartItem item : cartItemsBySkuId) {
////                            //根据商店id和数量对比
////                            if (!Objects.equals(item.getCount(), cartItem.getCount())&& Objects.equals(item.getCartId(), cartItem.getCartId())){
////                                //数量不正确修改数量
////                                CartItem updCartItem = new CartItem();
////                                updCartItem.setId(item.getId());
////                                updCartItem.setCount(cartItem.getCount());
////                                cartItemMapper.updateCartItem(updCartItem);
////                            }
////                        }
////                    }else {
////                        //没有则添加该购物车详情信息
////                        cartItem.setCartId(cartVo.getId());
////                        cartItemMapper.insertCartItem(cartItem);
////                    }
////
////                }
////            }
//        }

//    }
}
